package mlz.f_object;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;

/*
    自定义框架类
    需求: 写一个框架，对于一个任意对象,该框架都可以把对象的字段名和对应的值,保存到文件中
 */
public class ObjectFrame {

    /**
     * 保存对象到文件中
     * @param obj 支持所有类型
     */
    public static void saveObject(Object obj) throws IllegalAccessException, FileNotFoundException {
        //5.将获取到的所有信息存入到文件中
        PrintStream ps = new PrintStream(new FileOutputStream("data.txt", true));

        //1.obj是任意对象,到底有多少个字段要保存暂时不知道
        //获取obj的字节码对象
        Class c  = obj.getClass();
        //获取类的简单类名
        String cName = c.getSimpleName();
        ps.println("---"+cName+"---");
        //2.从这个类中获取他的成员变量
        Field[] fields = c.getDeclaredFields();
        //遍历获取全部字段
        for(Field field : fields){
            //3.拿到成员变量的名字
            String name = field.getName();
            //设置访问权限
            field.setAccessible(true);
            //4.拿到成员变量对应的value
            String value = field.get(obj) + " ";
            ps.println(name + " = " + value);
        }

        //关闭流对象
        ps.close();

    }
}
